﻿// 1029train01.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <limits>
#include <algorithm>
#include <iomanip>

using namespace std;

/*
1. 大端表示：将数字的高位字节放置在低位地址
2. 小端表示：将数字的高位字节放置在高位地址
现有一个魔法输入的十进制数字（可能为负），你需要施展咒语，分别输出：
- 大端表示的结果
- 小端表示的结果
但要注意：
1. 如果输入的数字超出了魔法范围 [-2^31, 2^32)，则会引发“魔力溢出”（输出 overflow）
2. 负数采用魔法世界的补码规则。
输入格式
- 一行输入：一个魔法十进制整数，可能为负数，长度范围为 [1, 32]
- 注意：
  - 没有前导零。
  - 数值范围必须符合魔法规则 [-2^31, 2^32)。
输出格式
- 若数字在范围内：
  - 第一行：大端表示的结果（每个字节用两位16进制表示，字节之间以单空格分隔）。
  - 第二行：小端表示的结果（格式同上）。
- 若数字超出范围：
  - 输出字符串 overflow
 */
class Solution01
{
public:
    bool checkVerify(string& num_str)
    {
        //[-2^31, 2^32) 输出 overflow
        //长度范围为 [1, 32]
        int size = num_str.size();
        //如果字符串超过19位，转成long long 溢出
        if (size < 1 || size >= 19) return false;

        long long lower = 1LL << 31, upper = 1LL << 32;
        long long num = stoll(num_str);
        if (num < -lower || num >= upper) return false;
        return true;
    }

    string handleHex(uint64_t&num)
    {
        stringstream hex_sstream;
        hex_sstream << uppercase << hex << num;
        string hex_str = hex_sstream.str();
        if (hex_str.size() == 1) return '0' + hex_str;
        return hex_str;
    }

    Solution01(string&num_str)
    {
        bool is_verify = checkVerify(num_str);
        if (!is_verify)
        {
            cout << "overflow";
            return;
        }
        long long num = stoll(num_str);
        if (num<0)
        {
            num = (1LL << 32) + num;
        }

        vector<uint64_t>big_vec(4);
        vector<uint64_t>small_vec(4);
        for (int i=0; i<4; i++)
        {
            //unsigned char str0 = (num >> 24) & 0xFF;
            //大端
            int big_step = 8 * (3 - i);
            big_vec[i] = (num >> big_step) & 0xFF;

            //小端
            int small_step = 8 * i;
            small_vec[i] = (num >> small_step) & 0xFF;
        }

        stringstream big_sstream, small_sstream;
        for (int i=0; i<4; i++)
        {
            big_sstream << handleHex(big_vec[i]) << ' ';
            small_sstream << handleHex(small_vec[i]) << ' ';
        }

        string big_str = big_sstream.str(), small_str = small_sstream.str();
        //去掉最后一个空格
    	big_str.pop_back();
        small_str.pop_back();

        cout << big_str << endl;
        cout << small_str << endl;

	    //---
    }
};

int main()
{
    string num_str;
    cin >> num_str;

    Solution01 solu(num_str);
    return 0;
    //
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
